{
	// ! 模拟需求：比如，创建一个函数来获取对象中属性的值
	// 对getProp函数进行改造
	// function getProp(obj, key) {
	//    return obj[key]
	// }

	// let person = { name: 'jack', age: 18 }
	// getProp(person, 'name')

	// getProp(person, 'abc')

	// key 只能取第一个参数中 已有 的属性
  // 泛型的类型变量可以有多个，并且**类型变量之间还可以约束**(比如，第二个类型变量受第一个类型变量约束)
	function getProp<Obj, Key extends keyof Obj>(obj: Obj, key: Key): any {
		return obj[key]
	}

	let person = { city: '武汉', name: 'jack', age: 18 }

	getProp(person, 'name')

	//  getProp(person,"abc")
}
